<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<script src="../jsFrame/jquery.js"></script>


<!--<script>-->
<!--//如果只想改变b而保持a不变，就需要对对象a进行复制-->
<!--let a = {a:1,b:2,c:3}-->
<!--let b = a;-->
<!--console.log(b);-->
<!--b.a =22;-->
<!--console.log(a);-->

<!--//在可以使用jQuery的情况下，jQuery自带的extend方法可以用来实现对象的复制-->

<!--let c = {};-->

<!--$.extend(c,a);-->

<!--console.log(c);-->


<!--c.a=56;-->
<!--console.log(c);//这个时候只改变了c 没有改变a;-->

<!--</script>-->

<script>

  /**
   *
   * "="就是浅拷贝,浅拷贝指向的内存都是同一个内存的地址
   *
   * model和CopyModel的值指向的是同一个内存。
   *
   * 而我们并不需要这样的浅拷贝,深拷贝是在内存中开辟一个新的内存地址：
   *
   */
      // var a = {
      //   a:1,
      //   b:2,
      //   init:function () {
      //     this.a=2
      //   }
      // }
      //
      // function clone(obj) {
      //   var result = {};
      //   for (key in obj){
      //     result[key]=obj[key];
      //   }
      //   return result
      // }
      //
      // var b_clone_a = clone(a);
      // console.log(b_clone_a);
      // b_clone_a.a = 5555;
      // console.log(b_clone_a);
      // console.log(a);


  var oPerson = {
        oName: "rookiebob",
        oAge: "18",
        oAddress: {
          province: "beijing"
        },
        ofavorite: [
          "swimming",
          {reading: "history book"}
        ],
        skill: function () {
          console.log("bob is coding");
        }
      };

  // function clone(obj) {
  //   var result = {};
  //   for (key in obj) {
  //     result[key] = obj[key];
  //   }
  //   return result;
  // }

  function deepClone(obj) {
    var result,oClass=isClass(obj);
    if(oClass==="Object"){
      result={};
    }else if(oClass==="Array"){
      result =[];
    }else {
      return obj
    }
    for(key in obj){
      var copy = obj[key];
      if(isClass(copy)==="Object"){
        result[key]=arguments.callee(copy);
      }else if(isClass(copy)==="Array"){
        result[key] = arguments.callee(copy)
      }else {
        result[key] = obj[key];
      }
    }
    return result;
  }

  function isClass(o) {
    if (o === null) return "Null";
    if (o === undefined) return "Undefined";
    //console.log(Object.prototype.toString.call(o).slice(8,-1));
    return Object.prototype.toString.call(o).slice(8, -1);
  }

  var arr = ['arr','arrb',"arr",'dep'];

  var oPerson={
    oName:"rookiebob",
    oAge:"18",
    oAddress:{
      province:"beijing"
    },
    ofavorite:[
      "swimming",
      {reading:"history book"}
    ],
    skill:function(){
      console.log("bob is coding");
    }
  };

  // var oNew =deepClone(oPerson);
  //
  // console.log(oNew);
  //
  // oNew.oAddress.province='wuhan';
  // console.log(oPerson.oAddress.province);

  var newArr = deepClone(arr)
  console.log(newArr);

</script>
</body>
</html>